/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.tri.gui.ListadosWorkers;

import java.util.Date;
import javax.swing.table.AbstractTableModel;
import org.tri.entity.AbstractCompra;
import org.tri.entity.Establecimiento;
import org.tri.entity.Productor;
import org.tri.gui.worker.TableFillListener;
import org.tri.gui.worker.TableFillWorker;
import org.tri.gui.worker.retrievers.BusquedaDataRetriever;
import org.tri.model.EntityTableModel;
import org.tri.persistence.search.BusquedaCompra;

/**
 *
 * @author giaco
 */
public class CaravanasListadosWorker extends AbstractListadosWorker {

    /**Booleando que indica si se listan caravanas propias o compradas*/
    Boolean propias;

    public CaravanasListadosWorker( Boolean propias ) {
        //instanciamos propias
        this.propias = propias;

        //inicializamos el modelo de tabla
        modelo = new EntityTableModel( AbstractCompra.class,
                                       new String[] { "Fecha", "Establecimiento", "Cantidad de Animales" },
                                       new String[] { "fecha", "establecimiento", "cantidadAnimales" } );


    }//end constructor CaravanasListadosWorker

    @Override
    public AbstractTableModel execute( Establecimiento establecimiento, Date fechaInicio,
                                       Date fechaFin,
                                       TableFillListener listener ) {
        //inicializo la busqueda
        BusquedaCompra compra = new BusquedaCompra();

        //agrego los criterios de busqueda
        compra.porFechaEnRango( fechaInicio, fechaFin );
        compra.porCaravanasPropias( propias );
        compra.porEstablecimiento( establecimiento );

        //agrego las busquedas al data retriever
        BusquedaDataRetriever busqueda = new BusquedaDataRetriever( compra );

        //realizo la busqueda en un Thread aparte
        TableFillWorker<AbstractCompra> worker = new TableFillWorker<AbstractCompra>( (EntityTableModel)this.modelo, busqueda );

        worker.addTableFillListener( listener );

        worker.execute();

        return modelo;

    }//end metodo execute

    @Override
    public AbstractTableModel execute( Productor productor, Date fechaInicio,
                                       Date fechaFin,
                                       TableFillListener listener ) {
        //inicializo la busqueda
        BusquedaCompra compra = new BusquedaCompra();

        //agrego los criterios de busqueda
        compra.porFechaEnRango( fechaInicio, fechaFin );
        compra.porCaravanasPropias( propias );
        compra.porProductor( productor );

        //agrego las busquedas al data retriever
        BusquedaDataRetriever busqueda = new BusquedaDataRetriever( compra );

        //realizo la busqueda en un Thread aparte
        TableFillWorker<AbstractCompra> worker = new TableFillWorker<AbstractCompra>( (EntityTableModel)this.modelo, busqueda );

        worker.addTableFillListener( listener );

        worker.execute();

        return modelo;

    }//end metodo execute

    @Override
    public String toString() {
        if ( propias )
            return "Caravanas Propias";
        else
            return "Caravanas Compradas";
    }

}
